-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement Query pipeline for InMemory provider #17589
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Bug blocking those tests has been fixed in previous checkin (support for OfType and Is for InMemory)
Don't send shapers to ServerQueryExpression Laying ground work for collection projection Part of #16963
Allow ExpressionTranslator to return null Fix bug in OfType Return null for unmapped property to fail gracefully Part of #16963
Part of #16963
When we bind to a non-nullable property on entity that can be nullable (e.g. due to left join) we modify the result to be nullable, to avoid "nullable object must have a value" errors. This nullability is then propagated further. We have few blockers: - predicates (Where, Any, First, Count, etc): always need to be of type bool. When necessary we add "== true". - conditional expression Test: needs to be bool, same as above - method call arguments: we can't reliably rewrite methodcall when the arguments types change (generic methods specifically), we convert arguments back to their original types if they were changed to nullable versions. - method call caller: if the caller was changed from non-nullable to nullable we still need to call the method with the original type, but we add null check before - caller.Method(args) -> nullable_caller == null ? null : (resultType?)caller.Method(args) - selectors (Select, Max etc): we need to preserve the original result type, we use convert - anonymous type, array init: we need to preserve the original type, we use convert Also enable GearsOfWar and ComplexNavigation tests for in memory.
Part of #16963
Update issues references and add area for #16963 Enable tests which are already working
…electMany Part of #16963
Fixed cases involving member pushdown. We now remove all converts from nullable to non-nullable (even ones explicitly added by users) so that nullability can propagate to the very top.
Is this an Ask Mode change? |
Yes. |
AndriySvyryd
approved these changes
Sep 3, 2019
ghost
deleted the
feature/in-memory
branch
September 3, 2019 23:28
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Close #16963
Description
As previously discussed with Tactics, this PR includes an updated in-memory database provider such that it works with the 3.0 query pipeline.
Customer Impact
Customers currently cannot use the in-memory provider for many non-trivial queries. This change brings back this functionality.
How found
Planned.
Test coverage
We have re-enabled thousands of tests using the in-memory provider that were previously only running for the relational providers.
Regression?
Yes, from 2.2.
Risk
There is very little risk of breaking anything outside of the in-memory provider, and the in-memory provider is primarily used by customers for testing.